package com.appleyk.config3;

import com.appleyk.service.IService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * <p>越努力，越幸运</p>
 *
 * @author appleyk
 * @version V.0.1.1
 * @blob https://blog.csdn.net/appleyk
 * @date created on  8:43 下午 2020/12/9
 */
public class ImportContext3 {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(ConfigA.class);
        IService bean = context.getBean(IService.class);
        bean.say();
        /**
         * 这里的案例主要是证明@Import注解导入的类要优先于@Configuration注解的类
         * ConfigA类中@Import了BServiceSelector类
         * 而BServiceSelector类实现了ImportSelector接口，所以可以自定义要导入的bean（数组形式）
         * 但由于ConfigA配置类中，A注入的时候加了@ConditionalOnMissingBean（IService.class）注解
         * 因此，一个容器里只会存在一个IService的bean实例
         * 那么问题来了，究竟是A会注入呢还是B呢？
         * 这里就牵扯到一个顺序问题，如果A先注入，那B就不会注入，反之，则A不会注入
         * 显然，最后的打印结果是BService say.
         * 从打印的结果可以说明，B是优先于A注入到容器中的，
         * 换句话说，就是@Import优先于@Configuration先处理Bean的导入（主要向容器中注册bean的定义）
         */

    }
}
